package com.itheima.reggie.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.reggie.entity.Category;
import com.itheima.reggie.entity.Dish;
import com.itheima.reggie.entity.Setmeal;
import com.itheima.reggie.exception.CustomException;
import com.itheima.reggie.mapper.CategoryMapper;
import com.itheima.reggie.service.CategoryService;
import com.itheima.reggie.service.DishService;
import com.itheima.reggie.service.SetmealService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author ：石破天
 * @date ：Created in 2022年05月25日
 * @description ：
 * @version: 1.0
 */
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
   // 这个方法是我们自己定义的, 除了 自己定义的以外 mp的一样能用!!!

    @Autowired
    private DishService dishService;

    @Autowired
    private SetmealService setmealService;

    /**
     *  根据分类id 删除分类信息
     *       删除之前要进行判断
     * @param id
     */
    @Override
    public void deleteById(Long id) {
          // 1: 根据分类id 去 查询菜品数据
           //   单表 单表的条件查询   菜品表单表的条件查询
           //   菜品表Dish 的单表查询方法在哪里?
        //1.1 构建查询条件完成查询
        LambdaQueryWrapper<Dish> wrapper1 = new LambdaQueryWrapper<>();
        wrapper1.eq(Dish::getCategoryId,id);// 菜品表中分类id  传入分类id
        /*
          // 根据 Wrapper 条件，查询总记录数
              int count(Wrapper<T> queryWrapper); 查询数量
         */
        int count1 = dishService.count(wrapper1);
        // 1.2 如果查询出来的菜品数据 数量>0 说明有关联数据 不能删除
        if(count1>0){//说明有数据 抛出异常
            //  1.3 抛出异常
            throw new CustomException("当前分类关联了菜品,不能删除!请自重");
        }
        // 2: 根据分类id 去 查询套餐数据
        //1.1 构建查询条件完成查询
        LambdaQueryWrapper<Setmeal> wrapper2 = new LambdaQueryWrapper<>();
        wrapper2.eq(Setmeal::getCategoryId,id);// 套餐表中分类id  传入分类id
        int count2 = setmealService.count(wrapper2);
        //   2.2 如果查询出来的套餐数据 数量>0 说明有关联数据 不能删除
        if(count2>0){//说明有数据 抛出异常
            //  2.3 抛出异常
            throw new CustomException("当前分类关联了套餐,不能删除!请自重");
        }
        // 3:如果没有抛出异常  说明可以正常删除 调用正常删除方法.
        removeById(id);//调用mp正常删除
    }
}
